
import matplotlib.pyplot as plt
from sklearn.cluster import MiniBatchKMeans,KMeans
from sklearn import metrics
from sklearn.datasets._samples_generator import make_blobs

#生成数据集，其中X为二维数组，y为一维数组
X,y=make_blobs(n_samples=10,n_features=2,centers=[[-1,-1],[0,0],[1,1],[2,2],[4,4]],
               cluster_std=[0.4,0.2,0.2,0.2,0.2],random_state=9)

print(X)
#生成数据散点图
plt.scatter(X[:,0],X[:,1],marker='o')
plt.show()

for index,k in enumerate((2,3,5)):
    # 将图像划分为两行两列的四个子图
    plt.subplot(2,2,index+1)

    #调用MiniBatchKMeans算法接口函数
    #n_clusters中心点的个数，batch_size确定MiniBatchKMeans的采样集的大小，random_state确定用于质心初始化的随机数生成
    #计算群集中心并预测每个样本的群集索引
    y_pred = MiniBatchKMeans(n_clusters=k,batch_size=200,random_state=9).fit_predict(X)
    print(y_pred)
    #给聚类结果一个评分
    score = metrics.calinski_harabasz_score(X,y_pred)

    #绘制散点图，参数c为颜色
    plt.scatter(X[:,0],X[:,1],c=y_pred)
    #添加说明，前三个参数为x,y，字符串，transform为移动坐标轴，horizontalalignment为水平对其方式
    plt.text(.99,.01,('k=%d,score:%.2f' % (k,score)),transform=plt.gca().transAxes,
             size=10,horizontalalignment='right')

plt.show()
